ASP.NET Core Blazor | Grouping Data

This is Part 13 of Web development with Blazor series. In this article we will discuss grouping data.
Enable Grouping in Blazor DataGrid

- To enable grouping, set
AllowGrouping = "true". - To group rows in the grid simply drag and drop the column header in the group drop area.
- With grouping applied, datagrid records are organized into a hierarchical structure which can then be easily collapsed and expanded.
- To disable grouping by a specific column, set
AllowGrouping="false"on the respective<GridColumn>. - In the example below, Grouping by
LastNamecolumn is disabled.
@page "/all"
@if (Employees == null)
{
<h3>Loading Data...</h3>
}
else
{
<h3>All Employees</h3>
<SfGrid DataSource="@Employees" AllowGrouping="true">
<GridColumns>
<GridColumn Field=@nameof(Employee.EmployeeId) HeaderText="ID"></GridColumn>
<GridColumn Field=@nameof(Employee.FirstName) HeaderText="First Name"></GridColumn>
<GridColumn AllowGrouping="false" Field=@nameof(Employee.LastName) HeaderText=" Last Name"></GridColumn>
<GridColumn Field=@nameof(Employee.Gender) HeaderText="Gender"></GridColumn>
</GridColumns>
</SfGrid>
}
@code {
public List<Employee> Employees { get; set; }
[Inject]
public IEmployeeService EmployeeService { get; set; }
protected override async Task OnInitializedAsync()
{
Employees = (await EmployeeService.GetAllEmployees()).ToList();
}
}
Group Settings

- To configure or customise group settings use
<GridGroupSettings>component. - To display group and ungroup toggle button set
ShowToggleButton="true". - To display ungroup button (X) set
ShowUngroupButton="true". - For numeric and datetime columns, to enable or disable grouping by the format string use
EnableGroupByFormatboolean property. - When data is grouped by a specific column, that column is not displayed in the DataGrid.
- Set
ShowGroupedColumn="true"to display the grouped column in the datagrid. - In the following example, data rows are grouped by
Gendercolumn and we also see the Gender column in the DataGrid.
<SfGrid DataSource="@Employees" AllowGrouping="true">
<GridGroupSettings ShowGroupedColumn="true" ShowUngroupButton="true" ShowToggleButton="true">
</GridGroupSettings>
<GridColumns>
<GridColumn Field=@nameof(Employee.EmployeeId) HeaderText="ID"></GridColumn>
<GridColumn Field=@nameof(Employee.FirstName) HeaderText="First Name"></GridColumn>
<GridColumn Field=@nameof(Employee.LastName) HeaderText=" Last Name"></GridColumn>
<GridColumn Field=@nameof(Employee.Gender) HeaderText="Gender"></GridColumn>
</GridColumns>
</SfGrid>
Group Caption
The default group caption is shown below.

Use <CaptionTemplate> componentto customise the group caption as shown below.

<SfGrid DataSource="@Employees" AllowGrouping="true">
<GridGroupSettings>
<CaptionTemplate>
@{
var employee = (context as CaptionTemplateContext);
<div>@employee.Field : @employee.Key - @employee.Count Employees</div>
}
</CaptionTemplate>
</GridGroupSettings>
<GridColumns>
<GridColumn Field=@nameof(Employee.EmployeeId) HeaderText="ID"></GridColumn>
<GridColumn Field=@nameof(Employee.FirstName) HeaderText="First Name"></GridColumn>
<GridColumn Field=@nameof(Employee.LastName) HeaderText=" Last Name"></GridColumn>
<GridColumn Field=@nameof(Employee.Gender) HeaderText="Gender"></GridColumn>
</GridColumns>
</SfGrid>
Initial Group
To have the data grouped by one or more fields on the initial grid load, use Columns property of <GridGroupSettings> component.
@{
var intialGrouping = (new string[] { "Gender", "FirstName" });
}
<SfGrid DataSource="@Employees" AllowGrouping="true">
<GridGroupSettings Columns="@intialGrouping">
</GridGroupSettings>
<GridColumns>
<GridColumn Field=@nameof(Employee.EmployeeId) HeaderText="ID"></GridColumn>
<GridColumn Field=@nameof(Employee.FirstName) HeaderText="First Name"></GridColumn>
<GridColumn Field=@nameof(Employee.LastName) HeaderText=" Last Name"></GridColumn>
<GridColumn Field=@nameof(Employee.Gender) HeaderText="Gender"></GridColumn>
</GridColumns>
</SfGrid>
When the grid first loads, the data is grouped by Gender and FirstName columns.

To avoid ungrouping or further grouping of a column after initial column grouping, set ShowDropArea="false".
<SfGrid DataSource="@Employees" AllowGrouping="true">
<GridGroupSettings Columns="@intialGrouping" ShowDropArea="false">
</GridGroupSettings>
<GridColumns>
<GridColumn Field=@nameof(Employee.EmployeeId) HeaderText="ID"></GridColumn>
<GridColumn Field=@nameof(Employee.FirstName) HeaderText="First Name"></GridColumn>
<GridColumn Field=@nameof(Employee.LastName) HeaderText=" Last Name"></GridColumn>
<GridColumn Field=@nameof(Employee.Gender) HeaderText="Gender"></GridColumn>
</GridColumns>
</SfGrid>
Column drop area is hidden and the data cannot be ungrouped or grouped further.

© 2020 Pragimtech. All Rights Reserved.

